home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / gawk / gawk213b.zoo / test / lisp / numbers.w < prev    next >
Text File  |  1991-05-21  |  1KB  |  47 lines

  1. ; numeric functions
  2. ; This is all symbol manipulation- walk has no built-in math!
  3. ; It's too slow to be of much use.
  4.  
  5. ; error conditions
  6. (set 'NOADD '"addition undefined for given arguments")
  7. (set 'NOSUB '"subtraction undefined for given arguments")
  8.  
  9. (set '_integers_ '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))
  10.  
  11. ; increment a number by 1
  12. (set 'add1 '(lambda (n) (or (succ n _integers_) (error NOADD))))
  13.  
  14. ; decrement by 1
  15. (set 'sub1 '(lambda (n) (or (pred n _integers_) (error NOSUB))))
  16.  
  17. ; t if x is 0
  18. (set 'zerop '(lambda (x) (eq x 0)))
  19.  
  20. ; t if x is a number
  21. (set 'numberp '(lambda (x) (member x _integers_)))
  22.  
  23. ; t if x > y
  24. (set 'greaterp '(lambda (x y) (member x (after _integers_ y))))
  25.  
  26. ; t if x < y
  27. (set 'lessp '(lambda (x y) (member y (after _integers_ x))))
  28.  
  29. ; subtraction
  30. (set 'difference
  31.     '(lambda (x y)
  32.     (cond ((zerop y) x)
  33.         (t (difference (sub1 x) (sub1 y))))))
  34.  
  35. ; take the length of a list
  36. (set 'length
  37.     '(lambda (s)
  38.     (cond ((atom s) 0)  ; or (null s)
  39.         ((null (cdr s)) 1)
  40.         (t (add1 (length (cdr s)))))))
  41.  
  42. ; addition (forget about actually using this)
  43. (set 'plus
  44.     '(lambda (x y)
  45.     (length (append (before _integers_ x) (before _integers_ y)))))
  46.